Add a DropState enum to the internal state of the sidebar
authorFederico Mena Quintero <federico@gnome.org>
Fri, 19 Apr 2013 16:00:36 +0000 (11:00 -0500)
committerFederico Mena Quintero <federico@gnome.org>
Fri, 19 Apr 2013 16:20:13 +0000 (11:20 -0500)
We want to show a little animation when a DnD operation is happening and the user hovers
between existing bookmarks.  The animation should indicate the user that he's about to
create a new bookmark from the file right there.

Signed-off-by: Federico Mena Quintero <federico@gnome.org>
gtk/gtkplacessidebar.c

index 98cd47f1d8201ad9dca049bdfe1fd4c2c7a2759d..f66b7c05d85b5f6b1fad451cb36e48f0da3a3d3e 100644 (file)
 
 #define DO_NOT_COMPILE 0
 
+/* These are used when a destination-side DnD operation is taking place.
+ * Normally, when a file is being hovered directly over a bookmark,
+ * we'll be in DROP_STATE_NORMAL.
+ *
+ * But when a file is being hovered between bookmarks, this means the user
+ * may want to create a new bookmark for that file between those bookmarks.
+ * In that case, the drop state will be *not* DROP_STATE_NORMAL.
+ *
+ * When the drop state is FADING_OUT, it means that the user is hovering
+ * directly over an existing bookmark and an immediate drop will cause the
+ * file being dragged to be dropped on the bookmark, instead of causing
+ * a new bookmark to be created.
+ */
+typedef enum {
+       DROP_STATE_NORMAL,
+       DROP_STATE_NEW_BOOKMARK_FADING_IN,
+       DROP_STATE_NEW_BOOKMARK_ARMED,
+       DROP_STATE_NEW_BOOKMARK_FADING_OUT
+} DropState;
+
 struct _GtkPlacesSidebar {
        GtkScrolledWindow parent;
 
@@ -143,6 +163,9 @@ struct _GtkPlacesSidebar {
 
        GtkPlacesOpenFlags open_flags;
 
+       DropState drop_state;
+       int new_bookmark_index;
+
        guint show_desktop : 1;
 };
 
@@ -3588,6 +3611,9 @@ gtk_places_sidebar_init (GtkPlacesSidebar *sidebar)
                                  sidebar->hostnamed_cancellable,
                                  hostname_proxy_new_cb,
                                  g_object_ref (sidebar));
+
+       sidebar->drop_state = DROP_STATE_NORMAL;
+       sidebar->new_bookmark_index = -1;
 }
 
 static void